home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-06-29 | 1.9 KB | 60 lines | [TEXT/ReWr] |
- (* =======================small examples =================== *)
-
- factorial[0] -> 1;
- factorial[n:int] -> n*factorial[n-1];
-
- fib[0] -> 1;
- fib[1] -> 1;
- fib[n:int] -> fib[n-1]+fib[n-2];
-
- joinx[x:lis,y:lis] -> {.x,.y};
-
- (* ========================== nprime ====================== *)
-
- nprime[n:int] -> primeaux[{},0,n,2];
-
- (* primeaux[primes found so far, sqrt, number found, this try] *)
- primeaux[l:lis,s:int,0,k:int] -> k-1;
- primeaux[l:lis,s:int,n:int,k:int]::k>s*s -> primeaux[l,s+1,n,k];
- primeaux[l:lis,s:int,n:int,k:int] -> primeaux2[primetest[s,k,{},.l],s,n,k];
-
- (* primeaux2[primes found so far, is prime?, sqrt, number found, this try] *)
- primeaux2[l:lis,0,s:int,n:int,k:int] -> primeaux[l,s,n,k+1];
- primeaux2[l:lis,1,s:int,n:int,k:int] -> primeaux[{.l,k},s,n-1,k+1];
-
- (* primeaux2[sqrt, this try, list of primes checked, primes unchecked] *)
- primetest[s:int,k:int,l:lis] -> l,1;
- primetest[s:int,k:int,l:lis,a:int,.b]::a>s -> {.l,a,.b},1;
- primetest[s:int,k:int,l:lis,a:int,.b]::k%a=0 -> {.l,a,.b},0;
- primetest[s:int,k:int,l:lis,a:int,.b] -> primetest[s,k,{.l,a},.b];
-
- (* ========================== atoi2 ======================= *)
-
- atoi2[.x] -> atoixx[xatoi[.x]];
-
- atoixx[x:int] -> x;
- atoixx[.x] -> "error - not a number";
-
- xatoi["-",.n] -> xnegx[xatoi[.n]];
- xatoi["$",.a] -> xatoih[0,.a];
- xatoi["%",.a] -> xatoib[0,.a];
- xatoi[x:char,.a]::xisdigit[x] -> xatoix[0,x,.a];
- xatoi[.a] -> {},.a;
-
- xnegx[{},.rest] -> {},.rest;
- xnegx[a:int,.rest] -> -a,.rest;
-
- xatoix[x:int,d:char,.n]::xisdigit[d] -> xatoix[10*x+d:int-"0":int,.n];
- xatoix[x:int,.n] -> x,.n;
-
- xatoih[x:int,d:char,.n]::xisdigit[d] -> xatoih[16*x+d:int-"0":int,.n];
- xatoih[x:int,d:char,.n]::d>="A" & d<="F" -> xatoih[16*x+10+d:int-"A":int,.n];
- xatoih[x:int,d:char,.n]::d>="a" & d<="f" -> xatoih[16*x+10+d:int-"a":int,.n];
- xatoih[x:int,.n] -> x,.n;
-
- xatoib[x:int,"0",.n] -> xatoib[2*x,.n];
- xatoib[x:int,"1",.n] -> xatoib[2*x+1,.n];
- xatoib[x:int,.n] -> x,.n;
-
- xisdigit[d:char] -> d>="0" & d<="9";
-